package com.itheima.service.impl;

import com.itheima.dao.CheckGroupDao;
import com.itheima.health.pojo.CheckGroup;
import com.itheima.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {

    //注入dao
    @Autowired
    private CheckGroupDao dao ;

    /**
     * 新增检查组
     *      1. 检查组包含两份数据，一份是自己的检查组的基本信息，一份是检查组使用了哪些检查项
     *      2. 这两份数据需要存到两张不同的表： t_checkgroup & t_checkgroup_checkitem
     *          2.1 先把基本的信息存入到检查组的表里面 ：t_checkgroup
     *          2.2 再把这个检查组用到了哪些检查项，把这些记录保存到中间表 ：  t_checkgroup_checkitem
     *      3. 一定要先往t_checkgroup这张表添加数据，这样子我们才能得到主键的返回，才能知道这个检查组的
     *          id值是多少。有了id值，才能去往中间表里面添加记录。
     *
     * @param checkGroup  检查组的基本信息
     * @param checkitemIds 检查组包含的检查项的id值
     * @return
     */
    @Override
    public int add(CheckGroup checkGroup, int[] checkitemIds) {

        //1. 往t_checkgroup 添加基本信息
        int row = dao.add(checkGroup);

        /*
            2. 往t_checkgroup_checkitem添加检查项信息
                2.1 由于从页面过来的时候，这个检查组可能选择了很多的检查项，
                    所以这里要遍历出来每一个检查项
                2.2 遍历一次，就往中间表里面添加一条记录。
                    checkitemIds = 【28,29,30】;
         */
        //只有主表（检查组的表）添加成功了之后，再去考虑添加从表（中间表）的数据
        int row2 = 0 ;
        if(row > 0 ){
            for (int checkitemId : checkitemIds) {
                row2 += dao.addItem(checkGroup.getId() , checkitemId );
            }
        }

        //当所有的操作都成功的时候，就返回1， 否则就返回 0 。
        return (row > 0 && row2 == checkitemIds.length) ?  1 :  0 ;
    }
}
